<?php
/**
 * Hooker
 *
 * 훅에 관련된 클래스를 로드 하고 호출하는 역할을 합니다.
 *
 * @package boot
 * @author  Platform Team
 */

class Hooker
{
    private static $aLoaded = false;

    /**
     * 실행
     *
     * @param string $sType
     */
    public static function run($sType)
    {
        if (!isset(self::$aLoaded[$sType])) return;

        $aLoaded = self::$aLoaded[$sType];

        if (empty($aLoaded)) return;


        foreach ($aLoaded as $load) {

            $sClass = isset($load['class']) ? $load['class'] : false;
            $sMethod = isset($load['method']) ? $load['method'] : false;
            $aParams = isset($load['params']) ? $load['params'] : false;

            if ($sMethod === false) {
                continue;
            }

            if ($sClass !== false) {
                $oHook = new $sClass();
                $oHook->$sMethod($aParams);
            } else {
                $sMethod($aParams);
            }

        }

        unset(self::$aLoaded[$sType]);
    }

    /**
     * 로드
     *
     * @param   string  $aHook
     * @return  booelan
     */
    public static function load($aHook)
    {
        if (!is_array($aHook)) return false;

        self::$aLoaded = $aHook;

        return true;
    }
}
